package com.cn.msg;

import java.util.Arrays;

public class Message {


    /**
     * byte 是有符号型的，占1 个字节；大小范围为-128—127
     * int  是整型数据类型，是有符号型的，占用4个字节，大小范围为：-2147483648到2147483647
     */

    /**
     * 类型 系统编号
     * 0 响应
     * 1 表示心跳
     * 2 broker节点注册
     * 3 请求broker url
     * 4 拉取主题topic列表
     * 5 拉取topic订阅详情
     * 6 更新broker 的集群信息
     * 7 slave 连接master
     * 8 producer 发送消息
     * 9 拉取消费消息
     * 10 master 复制消息给slave
     * 11 拉取消息
     * 12 持久化offset
     * 13 拉取offset
     * 14 broker注册topic
     * 15 lock queue
     * 16 unlock queue
     * 17 heartbeat
     * 18 pull client
     * 19 pull All topic
     * 20 slave上报位移
     */
    private byte type;

    //信息标志  0x1 表示 namesrv 0x2 表示broker 0x3 表示消费者 0x4 表示producer
    private byte flag;

    //主题信息的长度
    private int length = 0;

    //主题信息
    private String body;

    private byte[] byteBodys;

    private long opaque = 0l;

    /**
     * 处理器请求编码
     * 不同的请求对应不通的处理器，比如订阅topic的处理器，刷新offset的处理器
     */
    private byte nettyRequestWrapperCode = 0;


    public long getOpaque() {
        return opaque;
    }

    public void setOpaque(long opaque) {
        this.opaque = opaque;
    }

    public Message() {
    }

    public Message(byte type, byte flag, int length, String body) {
        this.type = type;
        this.flag = flag;
        this.length = length;
        this.body = body;
    }


    public byte getType() {
        return type;
    }

    public Message setType(byte type) {
        this.type = type;
        return this;
    }

    public byte getFlag() {
        return flag;
    }

    public Message setFlag(byte flag) {
        this.flag = flag;
        return this;
    }

    public int getLength() {
        return length;
    }

    public Message setLength(int length) {
        this.length = length;
        return this;
    }

    public String getBody() {
        return body;
    }

    public Message setBody(String body) {
        this.body = body;
        return this;
    }

    public byte[] getByteBodys() {
        return byteBodys;
    }

    public Message setByteBodys(byte[] byteBodys) {
        this.byteBodys = byteBodys;
        return this;
    }

    public byte getNettyRequestWrapperCode() {
        return nettyRequestWrapperCode;
    }

    public void setNettyRequestWrapperCode(byte nettyRequestWrapperCode) {
        this.nettyRequestWrapperCode = nettyRequestWrapperCode;
    }

    @Override
    public String toString() {
        return "Message{" +
                "type=" + type +
                ", flag=" + flag +
                ", length=" + length +
                ", body='" + body + '\'' +
                ", byteBodys=" + Arrays.toString(byteBodys) +
                ", opaque=" + opaque +
                ", nettyRequestWrapperCode=" + nettyRequestWrapperCode +
                '}';
    }
}
